package com.atguigu.ds;

import java.util.function.Consumer;

public interface List<E> {


    /**
     * 获取当前元素个数
     *
     * @return 个数
     */
    int size();

    /**
     * 判断链表是否为空
     *
     * @return 是否为空
     */
    boolean isEmpty();

    /**
     * 在链表末尾添加元素
     *
     * @param element 要添加的新元素
     */
    void add(E element);

    /**
     * 在指定位置插入元素
     *
     * @param index   指定位置
     * @param element 将要插入的新元素
     */
    void add(int index, E element);

    /**
     * 获取指定位置的元素
     *
     * @param index 指定位置
     * @return 指定位置的元素
     */
    E get(int index);

    /**
     * 删除指定位置的元素
     *
     * @param index 指定位置
     * @return 删除的元素
     */
    E remove(int index);

    /**
     * 修改指定位置的元素
     *
     * @param index   指定位置的索引
     * @param element 新元素
     * @return 旧元素
     */
    E set(int index, E element);

    /**
     * 遍历列表
     *
     * @param consumer 对元素的处理函数
     */
    void forEach(Consumer<E> consumer);

}